import Vue from 'vue'
import App from './App.vue'
import router from './router'
import './plugins/element.js'
//导入字体图标
import './assets/fonts/iconfont.css'
//导入全局样式表
import './assets/css/global.css'

//首页全局样式
// import './assets/css/theme-chalk.css'
import './assets/css/login_style.css'
// import './assets/css/order/orderStyle.css'

//导入axios
import axios from 'axios'
//用于树结构
import TreeTable from 'vue-table-with-tree-grid'
//登录页面全局js导入
// import jquery  from './assets/js/jquery-1.9.1.js'
import './assets/css/style.css'
//RAS加密算法
import JSEncrypt from 'jsencrypt';
//导入富文本编辑器
import VueQuillEditor from 'vue-quill-editor'
//导入富文本对应的样式
import 'quill/dist/quill.core.css' // import styles
import 'quill/dist/quill.snow.css' // for snow theme
import 'quill/dist/quill.bubble.css' // for bubble theme

//配置请求的根路径
// axios.defaults.baseURL = 'http://127.0.0.1:9527/'
//axios拦截器
axios.interceptors.request.use(config =>{
  //将token 值写入header请求头中Authorization=token
  config.headers.Authorization = window.sessionStorage.getItem('token')
  // console.log(config)

  //最后必须return config
  return config
})


//axios响应拦截器
axios.interceptors.response.use(function (response){
  //获取响应数据
  let data=response.data
  switch (data.code){
    case 401:
      //可以使用其他的提示框架，根据环境使用，MessageBox弹窗可执行promise操作，使在点击确定后执行某些操作
      if(data.msg=='无效的token'){
        Vue.prototype.$message({
          type: "error",
          message: "登录已过期，请重新登录"
       });
         //跳转登录页面
         router.replace({
          path: '/login' // 到登录页重新获取token
      })
      window.sessionStorage.clear()
     }
    case 403:
      Vue.prototype.$message({
        type: "error",
        message: "登录已过期，请重新登录"
     });
       //跳转登录页面
       router.replace({
        path: '/login' // 到登录页重新获取token
    })
    // 删除已经失效或过期的token（不删除也可以，因为登录后覆盖）
    window.sessionStorage.clear()
  }

  return response

},function(error){
  // console.log(error.response.status)
  return Promise.reject(error)
})

//axios全局注册
Vue.prototype.$http = axios

//jquery全局注册
Vue.prototype.jquery = jquery


Vue.config.productionTip = false
//全局注册组件
Vue.component('tree-table',TreeTable)
//将富文本编辑器，注册为全局可用的组件
Vue.use(VueQuillEditor)

//全局过滤器
Vue.filter('dateFormat',function(originVal){
  const dt = new Date(originVal)
  const y = dt.getFullYear()
  //padStart函数 如果月份没有两位，默认用0代替
  const m = (dt.getMonth() +1+'').padStart(2,'0')
  const d = (dt.getDate()+'').padStart(2,'0')

  const hh = (dt.getHours()+'').padStart(2,'0')
  const mm = (dt.getMinutes()+'').padStart(2,'0')
  const ss = (dt.getSeconds()+'').padStart(2,'0')

  return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
})


//RAS加密注册
Vue.prototype.$getRsaCode = function(publicKey,str){ // 注册方法
  let pubKey =publicKey ;// ES6 模板字符串 引用 rsa 公钥
  let encryptStr = new JSEncrypt();
  encryptStr.setPublicKey(pubKey); // 设置 加密公钥
  let  data = encryptStr.encrypt(str.toString());  // 进行加密
  return data;
}

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')
